C#怎么定义泛型集合类型的函数,返回一个集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么定义泛型集合类型的函数,返回一个集合相关的知识,希望对你有一定的参考价值。
或者可以这样说,需要定义一个函数,返回的数据类型是一个list<>集合,该怎么写呢?
参考技术A list<int> num().....
......
return num; 参考技术B
int num(); 这个函数返回一个int值
List<string> GetData() 这个就返回一个List<string>集合。
static void Main(string[] args)string[] n = "a","b","c";
List<string> list = GetData(n);
for (int i = 0; i < list.Count; i++)
Console.WriteLine(list[i]);
Console.Read();
static List<string> GetData(string[]nums)
List<string> list = new List<string>();
list.AddRange(nums);
return list;
本回答被提问者采纳 参考技术C 您好:.IEnumerable<T>接口IEnumerable<T>泛型接口支持在制定数据集合上进行迭代操作。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。在LINQ中,数据源实际上是实现了接口IEnumerable<T>的类,通过select子句返回的查询结果页是一个实现了IEnumerable<T>的类。在.NET类库中,IEnumerable<T>接口提供了大量与查询相关的方法。这些方法实际上是以扩展方法的形式定义,但是由于它的作用类型也为IEnumerable<T>接口,所以使用上和成员方法很类似。IEnumerable<T>接口主要成员成员
功能
Aggregate 对序列应用累加器函数,可以指定累加方法
Sum 计算序列中所有元素的和,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
Average 计算序列中所有元素的平均值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
Max 计算序列中所有元素的最大值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
Min 计算序列中所有元素的最小值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
All 检查是否序列中所有元素都满足条件,可以指定条件判断方法。如果所有元素都满足条件返回True,否则返回False
Any 检查序列中是否有任何一个元素满足条件,可以指定条件的判断方法。如果有一个以上(含一个)元素满足条件返回True,否则返回False
Contains 检查数据系列中是否包含特定的元素,可以指定相等比较方法
Count 返回序列中满足指定条件的元素的数量,可以指定条件判断方法
LongCount 返回序列中满足指定条件的元素的长数量,可以指定条件判断方法
Cast 将IEnumerable中的元素转换为指定的数据类型
DefaultIfEmpty 返回序列中指定位置的元素。如果序列为空,则返回默认的元素值
ElementAt 返回序列中指定索引处的元素
ElementAtOrDefault 返回序列中指定索引处的元素。如果序列为空,则返回默认值
First 返回序列中满足指定条件的第一个元素,可以指定条件判断方法
FirstOrDefault 返回序列中满足指定条件的第一个元素。如果不存在则返回默认值,也可以指定条件判断方法
Last 返回序列中满足指定条件的最后一个元素,可以指定条件判断方法
LastOrDefault 返回序列中满足指定条件的最后一个元素。如果不存在则返回默认值,也可以指定条件判断方法
Single 返回序列中满足指定条件的唯一元素。如果不止一个元素满足条件会引发一场,可以指定条件判断方法
SingleOrDefault 返回序列中满足指定条件的唯一元素。如果不存在则返回默认值,如果不止一个元素满足条件会引发一场,可以指定条件判断方法
Reverse 反转序列中元素的顺序
Distinct 返回序列中不重复的元素的集合,可以指定相等比较方法
Concat 连接两个序列,直接首尾相连。返回结果可能存在重复数据
Except 获取两个元素集合的差集,可以指定相等比较方法
Intersect 获取两个元素集合的交集,可以指定相等比较方法
Union 获取两个元素集合的并集,可以指定相等比较方法
SequenceEqual
比较两个序列是否相等,可以指定相等比较方法
Where 根据制定条件对集合中元素进行筛选,返回满足条件的元素集合
Skip 跳过序列中指定数量的元素,然后返回剩余的元素
SkipWhile 跳过序列中满足指定条件的元素,然后返回剩余的元素,可以指定条件判断方法
Take 从序列的开头返回指定数量的连续元素
TakeWhile 返回从序列开始的满足指定条件的连续元素,可以指定条件判断方法
ToArray 从IEnumerable<T>创建一个数组
ToList 从IEnumerable<T>创建一个List<T> 从上表可以看出,IEnumerable<T>提供的方法包括数值运算(Sum、Min、Max、Average)、元素数量(Count、LongCount)、取值(First、Last、ElementAt等)、提取子集(Skip、SkipWhile、Take、TakeWhile、)集合操作(Reverse、Concat、Distinct、Except、Intersect、Union、SequenceEqual等)。这些方法提供了LINQ所需要的所有操作。注意:IEnuerable<T>继承自IEnumerable<T>接口,所以它也包含IEnumerable接口的所有方法,所以还包括Select()、SelectMany()、Repeat()等方法。另外,IQuery<T>接口从IEnumerable<T>派生而来,通常也可以作为数据源使用,它的使用和IEnumerable<T>类似。追问
来点实例伐,大兄弟?
C#语言基础——集合(ArrayList集合)
集合及特殊集合
集合的基本信息:
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。
ystem.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
常用的集合为ArrayList类;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。
集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。
集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型的。
一、ArrayList集合:
ArrayList实现了IList、ICollection、IEnumerable接口;
ArrayList与Array的名字很相似,现在来比较一下两者的异同。
相同点:
(1)两者都实现了IList、ICollection、IEnumerable接口;
(2)两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。
不同点:
(1)ArrayList是集合,而Array是数组;
(2)ArrayList是具体类,Array是抽象类;
(3)数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量;
(4)获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性;
(5)数组可以有多维,而ArrayList只能是一维。
ArrayList具体提供的功能:
ArrayList al = new ArrayList();//初始化
al.Add(3);
al.Add(5);
al.Add(1);
al.Add(8);
al.Add(4);
错误 因为5号索引之前就没有,所以直接赋值不可以
al[5] = 9;
al[4] = 9;
查看个数
Console.WriteLine(al.Count);
清空集合
al.Clear();
克隆集合
ArrayList al1 = new ArrayList();
al1 = (ArrayList)al.Clone();
Console.WriteLine(al1[2]);
判断是否包含某个元素
Console.WriteLine(al.Contains(6));
查看第一次出现该元素的索引号 若没有,返回-1
Console.WriteLine(al.IndexOf(1));
查看最后一次出现该元素的索引号
Console.WriteLine(al.LastIndexOf(9));
在1号索引插入一个4
al.Insert(1,4);
Console.WriteLine(al[1]);
移除某个元素的第一次出现的值
al.Remove(4);
Console.WriteLine(al[1]);
移除某个索引号上的元素
al.RemoveAt(3);
Console.WriteLine(al[3]);
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
Console.WriteLine();
al.Sort();//排序,升序
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
改为降序
al.Reverse();//翻转集合
例题:1、输入人数,输入每一个人的分数,求平均分,求最高分,求最低分,写成集合。
ArrayList a = new ArrayList();
double m = 0;
Console.Write("请输入人数:");
int b = int.Parse(Console.ReadLine());
for (int i = 0; i < b; i++)
{
Console.Write("输入分数:");
a.Add(double.Parse(Console.ReadLine()));
m += double.Parse(a[i].ToString());
}
Console.Write("平均分为:"+(m/b));
a.Sort();
Console.Write("最低分为:"+a[0]);
Console.Write("最高分为:" + a[b - 1]);
Console.ReadLine();
2、将每个人的姓名,年龄存入集合,按照年龄从大到小排列,姓名也需要排列,需要知道年龄最大的是谁。
法一:
Console.Write("请输入人数:");
int n = int.Parse(Console.ReadLine());
ArrayList xm = new ArrayList();
ArrayList age = new ArrayList();
for (int i = 0; i < n; i++)
{
Console.Write("请输入第{0}个人的姓名:", (i + 1));
xm.Add(Console.ReadLine());
Console.Write("请输入{0}个人的年龄:", (i + 1));
age.Add(int.Parse(Console.ReadLine()));
}
for (int i = 0; i < n; i++)
{
for (int j = i; j < n - 1; j++)
{
if (int.Parse(age[i].ToString()) < int.Parse(age[j + 1].ToString()))
{
int zh = int.Parse(age[i].ToString());
age[i] = age[j + 1];
age[j + 1] = zh;
string z = xm[i].ToString();
xm[i] = xm[j + 1];
xm[j + 1] = z;
}
}
}
Console.WriteLine("年龄最大的是{0},是{1}岁", xm[0], age[0]);
Console.ReadLine();
法二:
Console.WriteLine("请输入人数:");
int a = int.Parse(Console.ReadLine());
ArrayList jh = new ArrayList();
for (int i = 0; i < a; i++)
{
Console.Write("请输入第{0}人的姓名:", i + 1);
jh.Add(Console.ReadLine());
Console.Write("请输入第{0}人的年龄:", i + 1);
jh.Add(Console.ReadLine());
}
Console.WriteLine();
for (int i = 1; i < a * 2; i = i + 2)
{
for (int j = i; j < a * 2 - 2; j = j + 2)
{
if (int.Parse(jh[i].ToString()) < int.Parse(jh[j + 2].ToString()))
{
int huan = int.Parse(jh[i].ToString());
jh[i] = jh[j + 2];
jh[j + 2] = huan;
string o = jh[i - 1].ToString();
jh[i - 1] = jh[j + 1];
jh[j + 1] = o;
}
}
}
Console.WriteLine("年龄最大的为:" + jh[0] + "年龄为:" + jh[1]);
Console.ReadLine();
注:借用上一题的定义集合名
●遍历集合:foreach (object aa in jh)
{
Console.WriteLine(aa);
}
●遍历数组:int [] array = new int[]{2,3,4,6,7,8,9,2};
foreach (int aa in array)
{
Console.WriteLine(aa+2);
}
以上是关于C#怎么定义泛型集合类型的函数,返回一个集合的主要内容,如果未能解决你的问题,请参考以下文章