問題タブ [toarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala: インデックス付きシーケンスの可変性と、可変に変換して戻すときに何が起こるか
最近、このシナリオに何度か遭遇しました。
- クラスには不変の(インデックス付き?)シーケンスメンバーがあります
- ファクトリ メンバー メソッドは、シーケンスが多少変更された新しいインスタンスを作成します。
これを行う効率的な方法は何ですか?
元の xs が既に配列であった場合、 toArray がこれを返すだけでオブジェクトを変更するのではないかと心配しているため、このシーケンスをその場で変更し、.clone できるように .toArray を実行します (つまり、不変になることを意味します)。 ) 値。ただし、 xs が配列でない場合、これは明らかに 2 つのコピーを作成するので、それは避けたいと思います。明らかに、その型をチェックすることもできますが、それは非常に洗練されていないようで、配列をラップできる他の可変シーケンスに対してチェックする必要があるかどうかはよくわかりません。どうする?
c# - ディクショナリ .Values および .Keys を配列に (同じ順序で)
辞書のキーと値を同じ順序で取得するエレガントな方法はありますか? dict.Values.ToArray()
and dict.Keys.ToArray()
(またはdict.Select(obj => obj.Key)
and dict.Select(obj => obj.Value)
) を使用すると、それらが同じ順序にならないことが心配です。
これを実行する簡単な方法は次のとおりです。
私には、これが LINQ の目的のようなものだと感じています (ただし、2 つの異なる呼び出しで辞書の反復順序が同じであるとは限りません)。これらを同じ順序で取得するエレガントな (つまり、LINQ などの) 方法はありますか?
どうもありがとうございました。
string - 文字列を配列 MVC3 コントローラーに変換する方法
どのように文字列
配列に変換しますか? MVC3(コントローラー)で
.net - 前にToArray()があるとLINQ GroupByが異なる結果を生成するのはなぜですか?
Entity Framework を使用して SQL からデータを取得しています。
以下のスニペットのようなコードを書きました。はデータベースからの値でSomething
あることに注意してください。さらに、 「0123456789-01」のように、すべての値が 10 桁、ハイフン、さらに 2 桁varchar
で構成されていることも関係があると思います。Something
(これは悪い設計だということを忘れないでください。私はこのデータベースのアーキテクトではありません。)
最初のステートメントはSomething
、ビューから列の個別の値を取得しますMyView
。結果として 5850 要素が得られます。これは私が期待するものです。
2 番目のステートメントは、ビュー全体をプルダウンし、それを の一意の値でSomething
グループ化し、5850 個のグループ化を生成します。これは私が期待するものです。
ToArray
3 番目のステートメントは、 の値を呼び出す点を除いて、まったく同じMyView
です。通常、呼び出しコードがデータ全体を使用し、遅延読み込み SNAFU を処理したくない場合にこれを行います。ただし、デバッガーでこのコードを実行すると、この 3 番目のステートメントによって 5727 個のグループが生成され、予想よりも 123 個少なくなります。
編集:GroupBy
4 番目のステートメントは、 andToArray
メソッドのチェーンの順序を単純に逆にします。この小さな変更を行うと、期待する行数が得られますが、実際の問題には、この SQL 呼び出しからのデータを他のデータと関連付けて単一のオブジェクトで返すコードがあるため、この質問をこの方法で解決できないという実際の問題があります。 .
ToArray
を使用すると間違った数の結果が得られることを理解したいと思います。
フォローアップ: user995219 の回答に応えMyView
て、追加の列を持つように書き直しました:からハイフンを省略し、結果を単一の整数と見なすことSomethingInt
によって形成された 32 ビット整数を単純に含みます。Something
次に、LINQ コードはGroupBy
新しく作成された整数に対して処理を行います。
ただし、この変更を行っても、私はまだ同じ問題を抱えています。
SQL では、SELECT COUNT(DISTINCT(SomethingInt)) FROM MyView;
予想どおり 5850 を返します。
これにより、.net フレームワークのあらゆる種類の文字列比較が取り除かれますが、問題は解決しません。