【问题标题】:Check against two separate array values and grabbing the smallest one to insert into a new array the CW new array values检查两个单独的数组值并抓取最小的一个以将 CW 新数组值插入到新数组中
【发布时间】:2019-06-11 04:08:21
【问题描述】:

我正在使用数组和条件语句,现在几乎没有丢失,并希望得到一些输入。

所以,我创建了两个数组

int[] one = new int[] { 
    4160414, 6610574, 2864453, 9352227, -4750937, -3132620, 2208017,  
    -2226227, -8415856, -9834062, -3401569, 7581671, 8068562, 7520435,  
    -9277044, -7821114, -3095212, 966785, 6873349, -8441152, -7015683, 
    -6588326, -282013, 4051534, 9930123, -3093234 };

int[] two = new int[] { 
    1099626, 6083415, 8083888, -8210392, 2665304, -8710738, -8708241, 
    8859200, -1255323, 5604634, 2921294, -7260228, 7261646, 1137004, 
    5805162, 4883369, 8789460, 9769240, 319012, -7877588, -1573772, 
    5192333, 1185446, 1302131, 4217472, -3471445};

下一步我在想的是我将不得不遍历每个数组

for (int i = 0; i < one.Length; i++)
{
    int xValue = one[i];

    for (int j = 0; j < two.Length; j++)
    {
        int yValue = two[j];
    }
}

现在我有了每个数组的索引,我需要检查 xValue 的索引是否小于 yValue 的索引

if (xValue < yValue)
{
   // dO SOMETHING HERE
}
if (yValue < xValue)
{
  // Do Something HERE
}

我感到困惑的地方是,根据我的理解,C# 不能将新值推送到数组中,它需要是数组的新实例并复制?

所以我试着做

if (xValue < yValue)
{
  Array.Copy(one, x, 13);
}
if (yValue < xValue)
{
 Array.Copy(two, x, 13)
}

两个数组都有 26 个值,因此需要创建一个包含 13 个的新数组来插入检查的值,但 Array.Copy 似乎无法让数组越界检查下限。

我只是在检查两个数组的索引处的值时感到困惑,然后抓取检查值的最小值,然后取那个小值并将其插入到一个新数组中,然后使用 foreach 循环进行迭代它并将值打印到控制台。 掌心

【问题讨论】:

  • 所以你有两个数组,每个数组有 26 项,你想要一个有 13 项的数组?你能解释更多关于逻辑的信息吗(最好用一些工作示例或图表)?目前,在比较两个数组中的相同索引时,您似乎应该得到一个包含最小值的 26 项数组。
  • 是的,你说得对,我说错了,我应该得到一个新数组,其中包含两个数组中最小的 26 个数字所以如果我比较 ArrayOne 并且第一个值为 2,然后是第二个数组被检查并且该值为 3,然后将抓取值 2 并将其插入到新数组中

标签: c# arrays loops if-statement conditional


【解决方案1】:

您可以使用 LINQ 的 Zip 来实现:

int[] smallest = one.Zip(two, (o, t) => Math.Min(o,t)).ToArray();

本质上,Zip 将向 lambda 表达式提供这两个项目,允许您以您认为合适的方式组合它们。在这种情况下,我们只需选择最小值并返回它。

Try it online

【讨论】:

  • 我从来没有发现 zip 的用途! +1
  • 我喜欢这个,谢谢你和我分享这个!欣赏它
【解决方案2】:

基本上,你需要在声明时定义新数组的size。使其大小与one 相同。然后通过比较索引i 处的每个数组中的项目,在每次迭代中添加来自onetwo 的最小项目。

int[] smallest = new int[one.Length]; 

for (int i = 0; i < one.Length; i++)
{
    if (one[i] < two[i])
    {
        smallest[i] = one[i];
    }
    else 
    {
        smallest[i] = two[i];
    }
}

【讨论】:

  • 感谢您与我分享这个!现在更有意义了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多