检查数组中的项目位置是偶数还是奇数(C#)

时间:2018-09-27 15:38:39

标签: c# arrays indexing position

我想做的是,给定一个数组,选择在列表中具有偶/奇索引的项目。

我会更好地解释:如果我有一个像let transport = nodemailer.createTransport(config.smtp); log4js.configure({ appenders: { email: { type: '@log4js-node/smtp', SMTP: config.smtp, transport, recipients: '3@ethereal.email' } }, categories: { default: { appenders: ['email'], level: 'error' } } }); 这样的数组,我想将所有[1,4,6,2,8](位置为零,数组(在这种情况下为evenList)中的两个,四个等)。 奇数物品也一样。

我已经开发了以下代码,但仍然遇到问题。

even position

我期望1,6,8将包含class CheckItem { static readonly string myNumber = "5784230137691"; static int[] firstTwelveList = new int[12]; static int[] arrayEvenPosition = new int[(myNumber.Length / 2)]; static int[] arrayOddPosition = new int[(myNumber.Length / 2)]; static readonly int idx = 0; public static void Position() { firstTwelveList = myNumber.Substring(0, 12).Select(c => c - '0').ToArray(); foreach (var even in firstTwelveList) { if(Array.IndexOf(firstTwelveList, idx) % 2 == 0) //never enter here... { Array.Copy(firstTwelveList, arrayEvenPosition, (myNumber.Length / 2)); } } Console.ReadLine(); } } arrayEvenPosition 5,8,2,0,3,6,1

3 个答案:

答案 0 :(得分:2)

对于您的任务,我认为for循环的基本形式比foreach更好。

int j=0;
int k=0;
for (int i=0; i<firstTwelveList.Length; i++) {
  if (i % 2 == 0) {
     arrayEvenPosition[j++] = firstTwelveList[i];
  } else {
     arrayOddPosition[k++] = firstTwelveList[i];
  }
}

请注意,我的代码不是完整的解决方案,而只是您应该做什么的想法。 祝你好运!

答案 1 :(得分:1)

尝试 Linq

 firstTwelveList = myNumber
   .Take(12)
   .Select(c => c - '0')
   .ToArray();

 arrayEvenPosition = firstTwelveList
   .Where((item, index) => index % 2 == 0)
   .ToArray();

 arrayOddPosition = firstTwelveList
   .Where((item, index) => index % 2 != 0)
   .ToArray();

答案 2 :(得分:0)

其他答案是正确的,因为有更简单的方法可以根据索引(奇数/偶数)将数组拆分为两个数组。但是我注意到您的代码有两个问题。

if(Array.IndexOf(firstTwelveList, idx) % 2 == 0) //never enter here..

IndexOf的两个参数是数组和要查找元素索引的项目,idx不是正确的参数。它应该是foreach循环中的even变量

第二次将正确的值复制到另一个数组时,您正在将第一个数组的前6个字符复制到新数组中。

引用Array.Copy(Array, Array, Int32)的参考文档,它只是将所需范围的元素从第一个数组复制到第二个数组。

因此,您需要修改代码以复制满足偶数/奇数条件的元素。为此,您需要一个变量来跟踪新数组的当前索引

可以通过这种方式修改整个类

class CheckItem
{
    static readonly string myNumber = "5784230137691";

    static int[] firstTwelveList = new int[12];
    static int[] arrayEvenPosition = new int[(myNumber.Length / 2)];
    static int[] arrayOddPosition = new int[(myNumber.Length / 2)];

    static int idx = 0;
    static int evenIdx = 0; // track current index of new array

    public static void Position()
    {
        firstTwelveList = myNumber.Substring(0, 12).Select(c => c - '0').ToArray();

        foreach (var even in firstTwelveList)
        {
            if (Array.IndexOf(firstTwelveList, even) % 2 == 0) // replace idx with even...
            {
                Array.Copy(firstTwelveList, idx, arrayEvenPosition, evenIdx, 1); // copy the element from the current index of first array to new array
                evenIdx++;
            }
            idx++;
        }
        Console.ReadLine();
    }
}