gpt4 book ai didi

c# - 林克 : Checking how many times the same value consecutively

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:15 25 4
gpt4 key购买 nike

这是我的第一个问题,所以如果不是很清楚,您可以询问更多信息。请记住,英语不是我的母语:)。

我想知道是否有可能为下一个规范提供一种优雅的方式。我认为 linq 可能是一种可能性,但我没有足够的技术经验来让它发挥作用:)。

请注意,这不是家庭作业,它只是一种获得解决此类问题的新角度的方法。

我试过使用聚合函数,也许一个 Action 会有所帮助。

我想跟踪:

  • 一个值在数组中连续出现的最大次数。
  • 每个值应该显示该值连续出现的最大次数

例如:

我们有一个包含 6 个元素的数组,元素为 0 或 1

0 , 0 , 0 , 1 , 1 ,0 result : 3 times 0 , 2 times 1
0 , 0 , 1 , 1 , 1 ,0 result : 2 times 0 , 3 times 1
0 , 1 , 0 , 1 , 1 ,0 result : 1 time 0 , 2 times 1
0 , 0 , 1 , 1 , 0 ,0 result : 2 times 0 , 2 times 1

提前致谢

最佳答案

我认为 Linq 不是一个好的出路;但是一个简单的方法可以做到:

// Disclamer: Dictionary can't have null key; so source must not coтtain nulls
private static Dictionary<T, int> ConsequentCount<T>(IEnumerable<T> source) {
if (null == source)
throw new ArgumentNullException("source");

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

int count = -1;
T last = default(T);

foreach (T item in source) {
count = count < 0 || !object.Equals(last, item) ? 1 : count + 1;
last = item;

int v;

if (!result.TryGetValue(last, out v))
result.Add(last, count);
else if (v < count)
result[item] = count;
}

return result;
}

测试:

  int[][] source = new int[][] { 
new[] { 0, 0, 0, 1, 1, 0 },
new[] { 0, 0, 1, 1, 1, 0 },
new[] { 0, 1, 0, 1, 1, 0 },
new[] { 0, 0, 1, 1, 0, 0 }, };

string report = string.Join(Environment.NewLine, source
.Select(array => $"{string.Join(" , ", array)} result : " +
string.Join(", ",
ConsequentCount(array)
.OrderBy(pair => pair.Key)
.Select(pair => $"{pair.Value} times {pair.Key}"))));

Console.Write(report);

结果:

0 , 0 , 0 , 1 , 1 , 0 result : 3 times 0, 2 times 1
0 , 0 , 1 , 1 , 1 , 0 result : 2 times 0, 3 times 1
0 , 1 , 0 , 1 , 1 , 0 result : 1 times 0, 2 times 1
0 , 0 , 1 , 1 , 0 , 0 result : 2 times 0, 2 times 1

关于c# - 林克 : Checking how many times the same value consecutively,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41995925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com