2

2つの特定の数字(0を除く)の間のすべての数字を調べたいのですが、最小から最大またはその逆ではなく、最も近いゼロから最も遠いものまでそれらを調べたいです。

たとえば、私の定義番号が で-4あり3、次の順序で番号を調べたい場合: -1, 1, -2, 2, -3,または, , 3, , , (どちらでもかまいません)。他の言語では、ループでこれを行うことができます.C#で実装するにはどうすればよいですか?答えがループの疑いがある場合、そのリストを作成するにはどうすればよいですか?-41-12-2-33-4foreachforeach

たとえば、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

質問で述べたことと一致しない回答を選択しました。

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
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

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>. forですfor。変数のインクリメントは++. リストへの追加はAdd. そしてforeachですforeach

于 2013-03-21T20:04:01.107 に答える
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ループです。

フリップ=フリップ^1:フリップ変数は1と0の間でフリップします
。i= i * -1:ループを通過するたびに、符号を変更して、目的の交互の数値
i = i +(flip == 1?1:0)を取得します。 :正の数の場合にのみ、カウンターをインクリメントします。

-申し訳ありませんが、これでも質問に答えることはできません。私は質問をざっと読み、これを思いついた。

于 2013-03-21T19:12:06.503 に答える
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 に答える