C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

リストの中身が1種類のときの判定

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■87451 / inTopicNo.1)  リストの中身が1種類のときの判定
  
□投稿者/ sazzu (2回)-(2018/05/22(Tue) 22:02:38)

分類:[C#] 

var x = new list<string>()

この中身が「あ」「あ」「あ」の場合と「あ」「あ」「あ」「い」の場合を考えて、

リストの中身が「あ」のみの場合、trueを返すという処理をしたいのですが、書き方がわかりません

Containsだとつの場合、どちらもtrueと判定されてしまいます。
前者のパターンのみtrueとするにはどう書けばよいでしょうか?
引用返信 編集キー/
■87452 / inTopicNo.2)  Re[1]: リストの中身が1種類のときの判定
□投稿者/ 魔界の仮面弁士 (1681回)-(2018/05/22(Tue) 22:24:06)
No87451 (sazzu さん) に返信
> リストの中身が「あ」のみの場合、trueを返す
List の中身が 0 件の場合に、true/falseの
いずれを求めるのかが曖昧ですが、ひとまず
All 拡張メソッドを試してみては如何でしょう。
引用返信 編集キー/
■87453 / inTopicNo.3)  Re[2]: リストの中身が1種類のときの判定
□投稿者/ にゃるら (16回)-(2018/05/23(Wed) 09:47:08)
> var x = new list<string>()
> 
> この中身が「あ」「あ」「あ」の場合と「あ」「あ」「あ」「い」の場合を考えて、

この質問内容がよくわからなかったんですけど、
こういったことであってるかな?

        static void Main()
        {            
            Console.WriteLine("テスト1の結果:" + test1().ToString());
            Console.WriteLine("テスト2の結果:" + test2().ToString());
        }

        static bool test1()
        {
            var x = new List<string>();
            x.Add("あ");
            x.Add("ああ");
            return Valid(x);
        }

        static bool test2()
        {
            var x = new List<string>();
            x.Add("あ");
            x.Add("あい");
            return Valid(x);
        }

        static bool Valid(List<string> strList)
        {
            return strList.Find((s) => !System.Text.RegularExpressions.Regex.IsMatch(s, "^[あ]*$")) == null;
        }

引用返信 編集キー/
■87454 / inTopicNo.4)  Re[3]: リストの中身が1種類のときの判定
□投稿者/ PANG2 (8回)-(2018/05/23(Wed) 11:10:18)
x.Contains("あ") && x.Distinct().Count == 1
引用返信 編集キー/
■87455 / inTopicNo.5)  Re[1]: リストの中身が1種類のときの判定
□投稿者/ 魔界の仮面弁士 (1682回)-(2018/05/23(Wed) 15:07:51)
No87451 (sazzu さん) に返信
> var x = new list<string>()
list<string> が
List<string> の誤記だと仮定して:


var x = new List<string>() { "あ", "あ", "あ" };
var y = new List<string>() { "あ", "あ", "あ", "い" };
var z = new List<string>() { };

bool a = x.All("あ".Equals); // true:すべて「あ」なので true
bool b = y.All("あ".Equals); //false:「あ」以外が含まれている
bool c = z.All("あ".Equals); // true:空の場合は true を返す
引用返信 編集キー/
■87456 / inTopicNo.6)  Re[2]: リストの中身が1種類のときの判定
□投稿者/ ぶなっぷ (179回)-(2018/05/24(Thu) 10:29:24)
まぁ、やり方はいろいろあるわけだけども、
たぶん、聞きたいのは、リストの中身が全て同一要素かどうかの判定であって、
全て"あ"であるかどうかの判定ではないだろう。

皆さんの回答の "あ" の部分を list[0] に置き換えれば目的を達せられる。
ただし、listが空の時、list[0]にアクセスすると例外が発生するので、
空でないことを確認してからlist[0]にアクセスする必要がある。

(例1) Enumerable.All<T> 拡張メソッドを使う場合 かつ 空の場合falseにする場合
bool allSameValue = list.Any() && list.All(x => x == list[0]);

(例2) Enumerable.All<T> 拡張メソッドを使う場合 かつ 空の場合trueにする場合
bool allSameValue = !list.Any() || list.All(x => x == list[0]);
引用返信 編集キー/
■87457 / inTopicNo.7)  Re[3]: リストの中身が1種類のときの判定
□投稿者/ furu (172回)-(2018/05/24(Thu) 10:50:14)
No87456 (ぶなっぷ さん) に返信
> まぁ、やり方はいろいろあるわけだけども、
> たぶん、聞きたいのは、リストの中身が全て同一要素かどうかの判定であって、
> 全て"あ"であるかどうかの判定ではないだろう。
で、あるならば

空の場合falseにする場合
bool allSameValue = list.GroupBy(x => x).Count() == 1;

空の場合trueにする場合
bool allSameValue = list.GroupBy(x => x).Count() <= 1;

のがわかりやすいかな
引用返信 編集キー/
■87458 / inTopicNo.8)  Re[4]: リストの中身が1種類のときの判定
□投稿者/ 魔界の仮面弁士 (1683回)-(2018/05/24(Thu) 13:34:44)
No87457 (furu さん) に返信
> 空の場合falseにする場合
> bool allSameValue = list.GroupBy(x => x).Count() == 1;
> 空の場合trueにする場合
> bool allSameValue = list.GroupBy(x => x).Count() <= 1;
> のがわかりやすいかな

「list.GroupBy(x => x).Count()」の部分を
「list.Distinct().Count()」にしても良いかも。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ