.net c#从多个循环中取一个值

take one value from multiple loops
2021-02-23
  •  译文(汉语)
  •  原文(英语)

我有一个数组列表,我想从每个数组中获取一个值并建立一个JSON结构.当前,对于每种管理策略,货币始终是循环中的最后一个值.循环命名时,如何取第一个值,然后第二个值等?

List<managedstrategy> Records = new List<managedstrategy>();
        int idcnt = 0;
        foreach (var name in results[0])
        {
            managedstrategy ms = new managedstrategy();
            ms.Id = idcnt++;
            ms.Name = name.ToString();

            foreach (var currency in results[1]) {
               ms.Currency = currency.ToString();
            }

            Records.Add(ms);
        }

        var Items = new
        {
            total = results.Count(),
            Records
        };

        return Json(Items, JsonRequestBehavior.AllowGet);

JSON结构为{记录:[{{name:blah,currency:gbp}]}}

解决过程1

假设我正确理解了该问题,则可能需要研究Linq提供的Zip方法.它用于将两个不同的列表"压缩"在一起,类似于拉链的工作方式.

一个相关的问题可以在这里找到.

解决过程2

当前,您将第二个循环嵌套在第一个循环中,从而导致它总是返回最后一个货币,因此您必须将其全部放入一个大的for循环中才能执行您想要的操作:

for (int i = 0; i < someNumber; i++)
{
    // some code
    ms.Name = results[0][i].ToString();
    ms.Currency = results[1][i].ToString();
}

I have a list of arrays, of which i want to take one value from each array and build up a JSON structure. Currently for every managedstrategy the currency is always the last value in the loop. How can i take the 1st, then 2nd value etc while looping the names?

List<managedstrategy> Records = new List<managedstrategy>();
        int idcnt = 0;
        foreach (var name in results[0])
        {
            managedstrategy ms = new managedstrategy();
            ms.Id = idcnt++;
            ms.Name = name.ToString();

            foreach (var currency in results[1]) {
               ms.Currency = currency.ToString();
            }

            Records.Add(ms);
        }

        var Items = new
        {
            total = results.Count(),
            Records
        };

        return Json(Items, JsonRequestBehavior.AllowGet);

JSON structure is {Records:[{name: blah, currency: gbp}]}

Solutions1

Assuming that I understand the problem correctly, you may want to look into the Zip method provided by Linq. It's used to "zip" together two different lists, similar to how a zipper works.

A related question can be found here.

Solutions2

Currently, you are nesting the second loop in the first, resulting in it always returning the last currency, you have to put it all in one big for-loop for it to do what you want:

for (int i = 0; i < someNumber; i++)
{
    // some code
    ms.Name = results[0][i].ToString();
    ms.Currency = results[1][i].ToString();
}
转载于:https://stackoverflow.com/questions/23733414/take-one-value-from-multiple-loops

本人是.net程序员,因为英语不行,使用工具翻译,希望对有需要的人有所帮助
如果本文质量不好,还请谅解,毕竟这些操作还是比较费时的,英语较好的可以看原文

留言回复
我们只提供高质量资源,素材,源码,坚持 下了就能用 原则,让客户花了钱觉得值
上班时间 : 周一至周五9:00-17:30 期待您的加入