0
は、このコードを参照してください。なぜ `.Reverse()。TakeWhile(..)`に無効なインデックスがあるようですか?
using System;
using System.Linq;
public class Test {
public static void Main() {
var s = "5401";
Console.WriteLine(s);
var predicate = (d,i) => {
var r = i > 0 ? s[i-1] >= s[i] : true;
Console.Write($"{i}: {s[i]}; ");
if(i > 0) Console.Write($"{i-1}: {s[i-1]};");
Console.WriteLine($" result: {r}");
return r;
};
Console.WriteLine(new String(s.TakeWhile(predicate).ToArray()));
// the case:
Console.WriteLine(new String(s.Reverse().TakeWhile(predicate).ToArray()));
}
}
それは出力:
5401
0: 5; result: True
1: 4; 0: 5; result: True
2: 0; 1: 4; result: True
3: 1; 2: 0; result: False
540
0: 5; result: True
1: 4; 0: 5; result: True
2: 0; 1: 4; result: True
3: 1; 2: 0; result: False
104
を第2のケースでReverse()
への呼び出しが動作しないのはなぜ?
変数 'i'が間違っています。配列が逆であってもゼロで始まります。だからs [0 -1]は意味をなさない。 – jdweng
うん、それを逃した。ありがとう! – Artyom
(なぜ、マイナスになったのでしょうか?) – Artyom