AtCoderのBeginner Contest 081 A – Placing Marblesを解いていたところ、文字列を1文字ずつ分解して、分解した文字を判定する必要がありました。
具体的には、まず文字列を1文字ずつ分解し、その後、1文字ずつ数字の1かどうかを判定すれば正解でした。
すぐに答えが思い浮かばなかったのですが、解法となる3通りの方法を考えましたので紹介します。
どのパターンも結果は同じになります。
パターン1
ToCharArray()を使うパターンです。
Linqを使っており、操作がちょっと多いかなという気がします。
using System;
using System.Linq;
namespace PracticeAtCoder
{
class Program
{
static void Main(string[] args)
{
var inputIntArray = Console.ReadLine();
var inputIntArray2 = inputIntArray.ToCharArray().Select(a=>int.Parse(a.ToString()));
Console.WriteLine(inputIntArray2.Count(a => a == 1));
}
}
}
パターン2
foreachを使って、文字列をcharに分解します。
パターン1と比べると、何をやっているか分かりやすいですね。
using System;
namespace PracticeAtCoder
{
class Program
{
static void Main(string[] args)
{
var inputIntArray = Console.ReadLine();
var counter = 0;
foreach(var a in inputIntArray)
{
if (a == '1') counter++;
}
Console.WriteLine(counter);
}
}
}
パターン3
Substring()を使ってstringを切り出します。
パターン2と同様に、文字列の先頭から順番に1文字ずつ切り出しています。
直感的にはパターン2のほうが分かりやすそうですね。
using System;
namespace PracticeAtCoder
{
class Program
{
static void Main(string[] args)
{
var inputIntArray = Console.ReadLine();
var counter = 0;
for (var i = 0; i < inputIntArray.Length; i++)
{
if (inputIntArray.Substring(i,1).Equals("1")) counter++;
}
Console.WriteLine(counter);
}
}
}
まとめ
私は行数が少なく書けるLinqが好きなのでパターン1で書きがちですが、可読性だとパターン2かなと思います。
今回は以上になります。
分かりにくいところや、「もっとこうしてほしい」などのご意見がありましたら、ツイッターから連絡いただけると幸いです。
質問に関しても、お気軽にお問い合わせください。
他の記事ではスマホアプリの開発やインスタグラムをスクレイピングする方法なども紹介しています。
興味があれば見てみてください。
コメント