2

我想遍历 2 个特定数字(不包括 0)之间的所有数字,并且我想遍历它们,而不是从最小到最大,反之亦然,从最接近零到最远。

例如,如果我的定义数字是-43然后我想按以下顺序检查数字:-1, 1, -2, 2, -3, 3,-41, -1, 2, -2, -3, 3, -4(两者中的哪一个无关紧要)。在其他语言中,我可以使用foreach循环来执行此操作,我如何在 C# 中实现它,如果答案是我怀疑是foreach循环,我该如何构造它的列表?

例如,在 Tcl 中,我会这样做:

# num1 is the abs value of the negative limit
set l [list ]
for {set i 1} {$i <= [max $num1 $num2]} {incr i} {
    if {$num1 >= $i} {
        lappend l [expr -1 * $i]
    }
    if {$num2 >= $i} {
        lappend l $i
    }
}

foreach num $l {
    puts $num
}
4

6 回答 6

7

您可以使用 Linq 通过返回函数来对列表进行排序。

foreach (int x in list.OrderBy(i=>Math.abs(i))
{
    // Do Stuff
}
于 2013-03-21T18:01:48.587 回答
1
List<int> values = new List<int>();

// Add items to list
// i.e. values.Add(-1);

values.Sort(delegate(int n1, int n2) { return math.Abs(n1).CompareTo(math.Abs(n2)); });

foreach(var num in values)
{
// Do work
}
于 2013-03-21T18:01:43.730 回答
1

您选择的答案与您在问题中陈述的内容不符。

int a=-4, b=3;

var list=Enumerable.Range(1, Math.Max(Math.Abs(a), Math.Abs(b))).SelectMany(x => new[] { x, -x });

foreach(var num in list) {
    Console.Write(" {0}", num);
}

然而,你真正想要的匹配更重要。我经常没有在第一次正确地描述我的问题。

于 2013-03-21T18:21:36.057 回答
1

将 Tcl 函数翻译成 C# 很简单:

 var l = new List<int>();
 for (int i = 1; i <= Math.Max(num1, num2); i++) {
  if (num1 >= i) {
   l.Add(-1 * i);
  }
  if (num2 >= i) {
   l.Add(i);
  }
 }
 foreach (int num in l) {
  System.Console.WriteLine(num);
 }

整数列表是List<int>forfor。增加一个变量是++。附加到列表是Add. 并且foreachforeach

于 2013-03-21T20:04:01.107 回答
0

就像是:

int startnum = -4;
int endnum = 3;
foreach (int x in Enumerable.Range(startnum, (endnum - startnum) + 1).OrderBy(n => Math.Abs(n))) {
if (x == 0)
   continue;

// Do stuff
}

只是不要忘记做出endum大于startnum,你很高兴。

于 2013-03-21T18:04:25.270 回答
0
int max = 5;
for (int i = 1, flip = 1; i < max; flip = flip ^ 1, i =  i * -1 , i = i + (flip == 1 ? 1 : 0) )
{
    System.Diagnostics.Debug.WriteLine(i);
}

这应该可以解决您的问题。这几乎是一个正常的 for 循环,只有几个额外的计数器/条件。

flip = flip ^ 1 :flip 变量只是在 1 和 0 之间翻转。
i = i * -1 :每次循环我们都会更改符号以获得所需的交替数
i = i + (flip == 1 ? 1 : 0) :我们仅在计数器为正数时才增加计数器。

- 对不起,这甚至没有回答这个问题。我浏览了这个问题并提出了这个问题。

于 2013-03-21T19:12:06.503 回答