方法一:Linq
ChannelList就是一个List类型的数据,IsOpen是其元素的属性
channelCount=(fromchannelinDevicesManager.Instance.CurrentDevice.ChannelList
wherechannel.IsOpen
groupchannelbychannel.ChannelID).Count();
方法二:泛型委托Predicate<T>
publicdelegateboolPredicate<inT>(
Tobj
)
方法三、
///<summary>
///筛选运送方式
///</summary>
///<paramname="list">运送方式集合</param>
///<paramname="strType">运送方式</param>
///<returns></returns>
privateList<FeeRuleDto>selectList(List<FeeRuleDto>list,stringstrType)
{
returnlist.FindAll(delegate(FeeRuleDtoinfo){
if(info.DeliveryType.ToString()==strType)
{
returntrue;
}
else{
returnfalse;
}
});
}
方法四、
使用List<T>获取数据库表的时候,每次用户 *** 作都重新访问数据库,然后返回List<T>,会严重影响程序运行效率的方式,其实List<T>自带有筛选的方法,把想要的数据筛选到另一个List<T>中,不用重新访问数据库,直接筛选后绑定控件显示即可。
示例如下:
publicNumberModelcurrentmark;
publicMainFrmmainFrm;
privateList<GoodsModel>goodslist;
privateList<GoodsKindModel>goodskindlist;
privatevoidlstgoodkind_SelectedIndexChanged(objectsender,EventArgse)
{
try
{
if(lstgoodkind.SelectedValue.ToString()!="XY.Model.GoodsKindModel")
{
stringid=lstgoodkind.SelectedValue.ToString();
stringkname=lstgoodkind.Text;
if(kname!="全部")
{
List<GoodsModel>glist=goodslist.FindAll(delegate(GoodsModelp){returnp.GoodsKind==kname;});
bindgoods(dgvgoods,glist);
}
else
{
bindgoods(dgvgoods,goodslist);
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbtnAdd_Click(objectsender,EventArgse)
{
try
{
stringgid=dgvgoods.Rows[dgvgoo
例如:跳过List前50条,然后取100条,可写为:
iclist_temp、iclist都为List类型
iclist_temp = iclist.Skip(50).Take(100).ToList()
取前100条,可以写为:
iclist_temp = iclist.Take(100).ToList()
ds.SelectedRows[0].Index].Cells["goodsid"].Value.ToString();
GoodsModelgoods=goodslist.Find(delegate(GoodsModelp){returnp.ID==gid;});
XY.BLL.ConsumeBll.Add(goods,currentmark,mainFrm.user);
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
#include <stdio.h>
#include <stdlib.h>
/*
1.创建结构体-----具体事物的抽象
2.创建链表
3.创建结点
4.插入 *** 作
4.1 表头插入
4.2 表尾插入
4.3 指定位置插入(指定位置的前面)
5.删除 *** 作
5.1 表头删除
5.2 表尾删除
5.3 指定位置删除
6.判断是否为空
7.打印链表
*/
//单链表的结构体
typedef struct SingleList
{
//数据域
int data //以这个数据为例
//struct MM myMM
//指针域
struct SingleList *next
}LIST,*LPLIST
/*
别名:习惯大写
起别名---小名
//好处:单词少,好看(含义更精简)
struct SingleList 换一种叫法: LIST
strcut SingleList * 换一种叫法: LPLIST
*/
//------->2.创建链表 ---任何结构都需要用一个东西去表示
LPLIST CreateList()
{
//创建过程就是初始化过程---初始化基本数据成员过程
//需要内存空间
LPLIST List = (LPLIST)malloc(sizeof(LIST))
if (List == nullptr)
{
printf("失败了\n")
system("pause")
exit(0)
}
//初始化基本数据成员----有表头的链表
List->next = nullptr
return List
}
//------->3.创建结点
LPLIST CreateNode(int data)
{
//1.需要内存
LPLIST Node = (LPLIST)malloc(sizeof(LIST))
//2.初始化基本数据成员
Node->data = data //和创建链表多了数据域
Node->next = nullptr
return Node
}
//------->4.1 头插法
//函数写法:形参可以表示要 *** 作的东西
//插入的链表是(List),插入的数据是多少(data)
void InsertListHeadNode(LPLIST List,int data)
{
//插入:创建插入的结点
LPLIST newNode = CreateNode(data) //创建结点
//插入 *** 作
newNode->next = List->next
/*
c=1
b=2
a=c
c=b
*/
List->next = newNode
}
//------->4.2 尾插法
void InsertListTailNode(LPLIST List, int data)
{
//找到表尾--->定义一个移动的指针
LPLIST tailNode = List
while (tailNode->next != nullptr)
{
tailNode = tailNode->next
}
//创建插入的结点
LPLIST newNode = CreateNode(data)
tailNode->next = newNode
}
//------->4.3 指定位置
void InsertListAppoinNode(LPLIST List, int data, int PosData)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List
//frontNode->next==taiNode:判断相邻
LPLIST tailNode = List->next
//判断是否为空
while (tailNode->data != PosData)
{
/*
frontNode=frontNode->next
tailNode=tailNode->next
*/
frontNode = tailNode
tailNode = frontNode->next
if (tailNode == nullptr)
{
printf("未找到指定位置\n")
system("pause")
exit(0)
}
}
//tailNode->data=data
//找到后创建插入的结点
LPLIST newNode = CreateNode(data)
frontNode->next = newNode
newNode->next = tailNode
}
//------->5.判断是否为空
//和创建的时候比较
int IsEmptyList(LPLIST List)
{
if (List->next == nullptr)
return 1 //返回1表示为空
return 0 //表示不为空
}
////------->6.打印数据
void PrintList(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法打印")
system("pause")
exit(0)
}
LPLIST pNext = List->next
while (pNext != nullptr)
{
printf("%d\t", pNext->data)
pNext = pNext->next
}
printf("\n")
}
//------->7.删除
//头删除
void DeleteListHeadNode(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法删除\n")
system("pause")
exit(0)
}
LPLIST DNode = List->next
List->next = DNode->next
free(DNode)
DNode = nullptr
}
//------->8.尾删
void DeleteListTailNode(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法删除\n")
system("pause")
exit(0)
}
//找到表尾--->定义一个移动的指针
LPLIST tailNode = List->next
LPLIST tailFront = List
while (tailNode->next != nullptr)
{
tailFront = tailNode
tailNode = tailFront->next
}
tailFront->next = nullptr
free(tailNode)
}
//------->9.指定位置删除
void DeleteListAppoinNode(LPLIST List, int PosData)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List
//frontNode->next==taiNode:判断相邻
LPLIST tailNode = List->next
//判断是否为空
while (tailNode->data != PosData)
{
/*
frontNode=frontNode->next
tailNode=tailNode->next
*/
frontNode = tailNode
tailNode = frontNode->next
if (tailNode == nullptr)
{
printf("未找到指定位置\n")
system("pause")
exit(0)
}
}
frontNode->next = tailNode->next
free(tailNode)
}
int main()
{
LPLIST List = CreateList() //List创建成功
printf("插入:\n")
InsertListHeadNode(List, 1)
InsertListHeadNode(List, 2)
InsertListHeadNode(List, 3)
InsertListTailNode(List, 0)
PrintList(List)
printf("删除:\n")
DeleteListHeadNode(List)
PrintList(List)
DeleteListTailNode(List)
PrintList(List)
printf("指定位置:\n")
//看不懂,可以找群主
InsertListAppoinNode(List, 4, 2)
InsertListAppoinNode(List, 3, 2)
//C/C++ 8群
PrintList(List)
// 491994603
DeleteListAppoinNode(List, 2)
PrintList(List)
system("pause")
return 0
}
以上代码偏多,主要是多个层次和多个角度,全方位书写顺序表,真正项目一般使用一种插入和删除方法.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)