C#で文字列をランダムにシャッフルする方法
C#で文字列の文字をランダムに入れ替える(シャッフルする)には、RandomクラスとLINQのOrderBy()メソッドを組み合わせるのが簡単です。この記事では、その具体的な手順とサンプルコードを紹介します。
手順1:Randomクラスのインスタンスを作成する
まず、乱数を生成するためにRandomクラスのインスタンスを作成します。
Random r = new Random();
手順2:Next()メソッドとOrderBy()で並べ替える
次に、文字列を文字配列に変換し、OrderBy()メソッド内でNext()メソッドを使ってランダムな順序で並べ替えます。
string random = new string(str.ToCharArray().OrderBy(s => (r.Next(2) % 2) == 0).ToArray());
処理の流れ
- ToCharArray():文字列をchar型の配列に変換します。
- OrderBy(s => (r.Next(2) % 2) == 0):各文字に対してランダムなbool値(true/false)をキーとして生成し、それに基づいて並べ替えます。
- ToArray():並べ替えた結果を配列に戻します。
- new string(...):char配列から新しい文字列を生成します。
完全なサンプルコード
以下は、文字列をランダム化して表示する完全なコード例です。
using System;
using System.IO;
using System.Linq;
class Demo {
static void Main() {
const string str = "electronics";
Random r = new Random();
string random = new string(str.ToCharArray().OrderBy(s => (r.Next(2) % 2) == 0).ToArray());
Console.WriteLine("String = {0}", str);
Console.WriteLine("Random String = {0}", random);
Console.Read();
}
}実行結果
String = electronics Random String = lericsecton
補足:より確実なシャッフル方法
上記の方法はシンプルですが、乱数キーが重複した場合に並び順が偏る可能性があります。より均等なシャッフルを行いたい場合は、Fisher-Yatesアルゴリズムを実装するか、各文字に対してr.Next()の値を直接キーとして使う方法も検討するとよいでしょう。
string random = new string(str.OrderBy(c => r.Next()).ToArray());
このように書くことで、各文字に一意に近い乱数キーが割り当てられ、より自然なランダム化が実現できます。用途に応じて使い分けてください。
-
【C#】String.Join()メソッドで文字列配列を連結する方法
String.Join()メソッドとはC#のString.Join()メソッドは、文字列配列のすべての要素を1つの文字列に連結するためのメソッドです。各要素の間には、引数で指定した区切り文字(セパレーター)が自動的に挿入されます。たとえば、区切り文字として改行コード「\n」を指定すれば、配列の各要素がそれぞれ別の行に配置された、複数行の文字列を簡単に作成できます。基本的な構文String.Join(\n, starray);第1引数: 要素間に挿入する区切り文字第2引数: 連結対象の文字列配列戻り値: 連結された1つの文字列サンプルコード以下は、5つの文字列要素を持つ配列を改行コードで連結し、
-
C#で文字列を反転する方法(Array.Reverseの使い方)
C#で文字列を反転する方法 C#で文字列を逆順に並べ替えたい場合は、Array.Reverse()メソッドを使うのが最も簡単です。文字列はそのままでは直接反転できないため、一度文字配列(char配列)に変換してから反転処理を行います。 文字列を反転するサンプルコード 以下は、文字列を反転して返すカスタムメソッドの例です。ここでは、引数として渡された文字列「Henry」を反転させています。 public static string ReverseFunc(string str) { char[] ch = str.ToCharArray(); Array.Reverse(ch)