-1

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

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

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

我已经写了一些代码但无法做到..

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();
            }
        }
4

3 回答 3

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

于 2013-11-13T17:02:11.757 回答
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];
}
于 2013-11-13T17:02:41.153 回答
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();
于 2013-11-13T17:05:11.230 回答