Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从矩形数组中获取前n个值_C#_Multidimensional Array - Fatal编程技术网

C# 从矩形数组中获取前n个值

C# 从矩形数组中获取前n个值,c#,multidimensional-array,C#,Multidimensional Array,我正在读取表示整数的字符串的txt文件。该文件以空格分隔。我已经创建了一个数组[10,2]。每次在文件I中找到字符串1~10时,数组[n,0]的增量为1。我也给数组[n,1]加上数字1~10 i、 e.txt文件内容: 1/1/1 10/1/2001 1 1 10 2 2 3 1 5 10 word word 3 3 etc.. streamreader读取1/1/1并确定不是1~10 streamreader读取10/1/2001并确定它不是1~10 streamreader读取1和++数

我正在读取表示整数的字符串的txt文件。该文件以空格分隔。我已经创建了一个数组[10,2]。每次在文件I中找到字符串1~10时,数组[n,0]的增量为1。我也给数组[n,1]加上数字1~10

i、 e.txt文件内容:

1/1/1 10/1/2001 1 1 10 2 2 3 1 5 10 word word 3 3 etc..
  • streamreader读取1/1/1并确定不是1~10
  • streamreader读取10/1/2001并确定它不是1~10
  • streamreader读取1和++数组[0,0]
  • streamreader读取1和++数组[0,0]
  • streamreader读取10和++数组[9,0]
  • 等等
结果将是:

  • “1”被发现3次
  • “2”被发现2次
  • “3”被发现3次
  • “5”被发现1次
  • “10”被发现2次
我的问题是,我需要将此数组按列0的值排序 以便:

1
3
2
10
5
数组中的第二列是,这样我就可以知道原始字符串(找到最多的字符串)是什么。 例子: 数组[0,0]=5//在txt文件中找到“1”的次数 数组[0,1]=1//这样我在排序后知道数组[0,0]的值是“1”的 数组[1,0]=10//在txt文件中找到“2”的次数 数组[1,1]=2//这样我在排序后就知道数组[1,0]的值是“2”的


以前我只有一个维度数组。当我对数组进行排序时,我无法知道数组[0]的原始值是什么,所以我决定制作一个rec数组,以便数组[0,1]从1切换到2,这样我就可以知道哪个字符串实际显示得最多。既然这样做了吗?

< P>作为一个建议,也许你可以考虑使用一个int字典来进行。这样你可以支持n个数字值(而不是一个固定的范围)。虽然我不确定我是否了解数组的第二维度还存储了什么

要使用当前解决方案按顺序输出它们,请假设您的多数组名为_countsIndexedByValues

var orderedCounts = _countsIndexedByValues.Select((innerArr, i) => new { Count = innerArr[0], Value = i}).OrderBy(u => u.Count);
orderCounts.ToList().ForEach(u => Console.Out.WriteLine(String.Format("'{0}' was found {1} times", u.Value, u.Count);

这是利用LINQ和匿名类型。。。在我使用匿名类型的地方,你可以使用一对或任何你想要的东西。

@jball在我们的编辑中有令人印象深刻的重叠,尽管每个编辑都会被绊倒other@MichaelMrozek是的,我刚刚注意到:)所以应该实现一个“这篇文章已经被另一个用户编辑了”警告类似于他们对答案所做的操作。@jball如果其他人保存,您在编辑时会收到一个警告,但通常需要一分钟时间,所以您会在它发生之前提交。当然,您可以使用自己的ForEach循环或类似的ForEach扩展方法来应用一个通用操作:public static void ForEach(此IEnumerable源,action action){ForEach(源中的var项)action(项);}了解数组[0,0]的原始值的方法所以我决定制作一个rec数组,让数组[0,1]从1切换到2,这样我就可以知道哪个字符串显示得最多。如果是这样的话,那么你肯定可以放弃第二维度,因为你可以从原始数组的索引(即value=index+1)解析它,然后在排序时,你可以使用匿名类型或某种普通结构(例如Pair或KeyValuePair)@user355925-我当然也建议使用Dictionary的搜索/计数功能,因为这将有助于保持值(作为键)与事件计数(作为值)的关联。此外,它将随着您的值范围而增长/收缩,查找费用为log(N)[其中N是值范围的大小],这对于您当前的10个数量级来说可以忽略不计,但提供了一个更具可扩展性(和可读性)的解决方案。