gpt4 book ai didi

c# - 根据不同的值遍历列表的有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:39 25 4
gpt4 key购买 nike

string sStoreStockFeed = "";
string sSeparator = "";

var distinctStoreIDList = skuStoreStockLevels.Select(x => x.Item1).Distinct();

foreach (var storeID in distinctStoreIDList)
{
foreach (var item in skuStoreStockLevels)
{
if (item.Item1 == storeID)
{
// add this one to a job for this store
sStoreStockFeed += sSeparator + item.Item1.ToString() + "," + item.Item2.ToString() + "," + item.Item3.ToString();
sSeparator = "|";
}
}
// some code to process the string before moving on
sStoreStockFeed = "";
sSeparator = "";
}

在上面的代码片段中,skuStoreStockLevels 恰好是一个 Tuple 类型的列表,Item1 是 StoreID。获得不同的列表后,它会遍历(非不同的)列表以获取每个适用的项目。效率低下的是(大)内部列表针对每个不同的项目(StoreID)重复迭代。

最佳答案

更新:纯 LINQ 解决方案。这将为您提供为每组项目创建的字符串列表。

var query = skuStoreStockLevel.GroupBy(x => x.Item1)
.Select(g => g.Aggregate(new StringBuilder(),
(sb, x) => sb.AppendFormat("{0}{1},{2},{3}", sSeparator, x.Item1, x.Item2, x.Item3),
(sb) => sb.ToString()));

foreach(var feed in query)
// some code to process the string before moving on

还有其他选项 - 顺序排序。相同的项目将一个接一个地出现。

int storeID = -1;
StringBuilder builder = new StringBuilder();

foreach (var item in skuStoreStockLevel.OrderBy(x => x.Item1))
{
builder.AppendFormat("{0}{1},{2},{3}", sSeparator, item.Item1, item.Item2, item.Item3);
if (item.Item1 != storeID)
{
// some code to process the string before moving on
storeID = item.Item1;
}
}

或者你可以使用分组

StringBuilder builder = new StringBuilder();

foreach (var storeGroup in skuStoreStockLevel.GroupBy(x => x.Item1))
{
foreach (var item in storeGroup)
builder.AppendFormat("{0}{1},{2},{3}", sSeparator, item.Item1, item.Item2, item.Item3);

// some code to process the string before moving on
}

当然,最好使用 StringBuilder 来创建字符串。

关于c# - 根据不同的值遍历列表的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13113005/

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