如何根据C#中其他数组中的条件在一个数组中添加数组元素?

时间:2013-11-13 16:51:52

标签: c# arrays

我有两个数组,一个是字符串数组,另一个是int数组 字符串数组有---> “11”,“11”,“11”,“11”,“12”,“12”元素和int数组分别有1,2,3,4,5,6。

我想要结果两个包含字符串数组的数组--->“11”,“12” 和int数组----> 10,11

如果字符串数组有重复的元素,则必须添加包含相应索引值的另一个数组。例如“11”在第1,第2,第3,第4个索引中因此其对应的值必须是其他所有元素的总和array.Can可以吗?

我写了一些代码,却无法做到......

static void Main(string[] args)
        {
            //var newchartValues = ["","","","","","",""];
            //var newdates = dates.Split(',');
            //string[] newchartarray = newchartValues;            
            //string[] newdatearray = newdates;
            int[] newchartValues = new int[] { 1, 2, 3, 4, 5, 6 };
            string[] newdates = new string[] { "11", "11","11","12","12","12" };
            int[] intarray = new int[newchartValues.Length];
            List<int> resultsumarray = new List<int>();
            for (int i = 0; i < newchartValues.Length - 1; i++)
            {
                intarray[i] = Convert.ToInt32(newchartValues[i]);
            }
            for (int i = 0; i < newdates.Length; i++)
            {
                for (int j = 0; j < intarray.Length; j++)
                {
                    if (newdates[i] == newdates[i + 1])
                    {
                        intarray[j] += intarray[j + 1];
                        resultsumarray.Add(intarray[j]);
                    }
                }
                resultsumarray.ToArray();
            }
        }

3 个答案:

答案 0 :(得分:1)

这是一种应该做你想做的事情的方法:

List<int> resultsumarray =  newdates
    .Select((str, index) => new{ str, index })
    .GroupBy(x => x.str)
    .Select(xg => xg.Sum(x => newchartValues[x.index]))
    .ToList();

结果是List<int>,有两个数字:6,15

答案 1 :(得分:1)

我不太满足你的需求,但我认为我修复了你的代码,结果在这个例子中将包含10和11:

int[] newchartValues = new int[] { 1, 2, 3, 4, 5, 6 };
string[] newdates = new string[] { "11", "11", "11", "11", "12", "12" };

List<int> result = new List<int>();
if (newdates.Length == 0)
    return;
string last = newdates[0];
int cursum = newchartValues[0];
for (var i = 1; i <= newdates.Length; i++)
{
    if (i == newdates.Length || newdates[i] != last)
    {
        result.Add(cursum);
        if (i == newdates.Length)
            break;
        last = newdates[i];
        cursum = 0;
    }
    cursum += newchartValues[i];
}

答案 2 :(得分:0)

这样的东西?

int[] newchartValues = new int[] { 1, 2, 3, 4, 5, 6 };
int[] newdates = new int[] { 11, 11,11,12,12,12 };
var pairs = Enumerable.Zip(newdates, newchartValues, (x, y) => new { x, y })
      .GroupBy(z => z.x)
      .Select(g => new { k = g.Key, s = g.Sum(z => z.y) })
      .ToList();
var distinctDates = pairs.Select(p => p.k).ToArray();
var sums = pairs.Select(p => p.s).ToArray();