Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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# 使用LINQ进行聚合_C#_Linq_Dictionary_Group By - Fatal编程技术网

C# 使用LINQ进行聚合

C# 使用LINQ进行聚合,c#,linq,dictionary,group-by,C#,Linq,Dictionary,Group By,我有一个字符串(例如A0009B80000J31500435)。是否有一种方法可以创建一个LINQ字典,将0分组并只显示一个条目?我需要的输出如下: format: <index, character> <0,A> <1,0> <4,9> <5,B> <6,8> <7,0> <11,J> ... 格式: ... 一个简单的循环(不是Linq)应该可以: string source = "A000

我有一个
字符串
(例如
A0009B80000J31500435
)。是否有一种方法可以创建一个LINQ字典,将0分组并只显示一个条目?我需要的输出如下:

format: <index, character>
<0,A>
<1,0>
<4,9>
<5,B>
<6,8>
<7,0>
<11,J>
...
格式:
...
一个简单的
循环(不是Linq)应该可以:

  string source = "A0009B80000J31500435";

  Dictionary<int, char> result = new Dictionary<int, char>();

  for (int i = 0; i < source.Length; ++i)
    if (i == 0 || source[i] != '0' || source[i - 1] != '0')
      result.Add(i, source[i]);
结果:

[0, A]
[1, 0]
[4, 9]
[5, B]
[6, 8]
[7, 0]
[11, J]
[12, 3]
[13, 1]
[14, 5]
[15, 0]
[17, 4]
[18, 3]
[19, 5]
编辑:从技术上讲,我们可以在这里发明Linq查询

Dictionary<int, char> result = Enumerable
  .Range(0, source.Length)
  .Where(i => i == 0 || source[i] != '0' || source[i - 1] != '0')
  .ToDictionary(i => i, i => source[i]);

我希望避免循环,因为我的字符串可能会很长。我也会这样做,但你的答案与标题“如何使用LINQ”不匹配。如果我这样回答的话,我会比按提交键更快地被否决。也许您应该添加一个linq版本。@user2729463:willy nilly您必须在字符串上循环(如果是linq,则使用explicit
for
或implict
IEnumerator
)用户2729463:我们不必将所有后续
0
进行分组,然后从组中取出第一项:我们只需取出第一项
0
并跳过后续
0
是否只有
0
进行分组?如果有两个连续的
9
s,这是指字典中的一个条目还是两个条目?
Dictionary<int, char> result = Enumerable
  .Range(0, source.Length)
  .Where(i => i == 0 || source[i] != '0' || source[i - 1] != '0')
  .ToDictionary(i => i, i => source[i]);
  string source = "A\0\0\09B8\0\0\0\0J315\0\0435";

  Dictionary<int, char> result = new Dictionary<int, char>();

  for (int i = 0; i < source.Length; ++i)
    if (i == 0 || source[i] != '\0' || source[i - 1] != '\0')
      result.Add(i, source[i]);