質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

1187閲覧

Processingで複数の条件でfindRowsを使いたい

baya

総合スコア14

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/02/15 11:51

編集2019/02/15 11:54

複数の条件でfindRowsを使いたいです。

このプログラムにもう一つ条件を加えて
実行したいです。

Procssing

1Table table; 2 3void setup() { 4 5 table = new Table(); 6 7 table.addColumn("Subject"); 8 table.addColumn("Score"); 9 table.addColumn("Average"); 10 11 12 TableRow newRow = table.addRow(); 13 14 newRow.setString("Subject", "ENGLISH"); 15 newRow.setString("Average", "UP"); 16 newRow.setString("Score", "RED"); 17 18 newRow = table.addRow(); 19 newRow.setString("Subject", "JAPANESE"); 20 newRow.setString("Score", "GREEN"); 21 newRow.setString("Average", "UP"); 22 23 24 newRow = table.addRow(); 25 newRow.setString("Subject", "MATHE"); 26 newRow.setString("type", "Insect"); 27 newRow.setString("Score", "RED"); 28 newRow.setString("Average", "DOWN"); 29 30 newRow = table.addRow(); 31 newRow.setString("Subject", "CHEMICAL"); 32 newRow.setString("Average", "GREEN"); 33 newRow.setString("Score", "DOWN"); 34 35for (TableRow row : table.findRows("RED", "Score")) { 36 println(row.getString("Subject") + ": " + row.getString("Score")); 37 } 38}

下記のように実行したいです。

ENGLISH: RED: UP

###試したこと

for (TableRow row : table.findRows(("RED", "Score")&&("UP", "Average")) { println(row.getString("Subject") + ": " + row.getString("Score")); }
for (TableRow row : table.findRows("RED", "Score") &&(TableRow row : table.findRows("UP", "Average") { println(row.getString("Subject") + ": " + row.getString("Score")+ ": " + row.getString("Average")); }

上記のやり方ではダメでした。

お手数ですが、助言をいただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

&&で繋げばよいというものでもありません。Processingにおいて&&で繋げるのはboolean型の式ですが、table.findRows(...)の結果型はbooleanではなく~~Iterator<TableRow>~~Iterable<TableRow>型ですので&&は使えません。このあたりはProcessingのTableの使い方というよりはProcessing言語(概ねJava言語と同じ)の正確な知識があると判断がしやすくなります。

それはさておき、Tableのリファレンスを見ますと

Additional Table methods are documented in the Processing Table Javadoc.

追加のTableメソッドは、Javadoc(要するにJavaのクラスリファレンス)に記載されています。

とあり、Javadocを見ると完全な仕様を知ることができます。パッと見た感じですがどの検索メソッドも単一条件しか指定できないようですね。複数の条件を指定するには若干低水準な論理を書かねばならないようです。

例:

processing

1 // ScoreカラムがREDの行だけ列挙 2 for (TableRow row : table.findRows("RED", "Score") { 3 // その行のAverageカラムがUPのときだけ何かする 4 if (row.getString("Average").equals("UP")) { 5 println(String.format("%s: %s: %s", 6 row.getString("Subject"), 7 row.getString("Score"), 8 row.getString("Average"))); 9 } 10 }

条件が3つ以上増えた場合は
if (row.getString(...).equals(...) && row.getString(...).equals(...)) {
のようにif文の条件を複数書けばよいでしょう。

投稿2019/02/15 14:55

編集2019/02/16 03:54
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2019/02/15 21:43

私もちょっと調べてみたのですが、集合演算なんてのもありますがハッシュ値がとれないと使えないみたいで、こういう場合は地道にやるしかなさそうですね。 > 条件が3つ以上増えた場合 そうなると、一つの条件だけを`for (TableRow row : table.findRows(("RED", "Score")) {`で特別扱いするのもちょっと考えもので for( TableRow : table.Rows()){ if(条件1 && 条件2 && 条件3 && ...){ } } として条件を一箇所に集中させた方が見やすくなったりするケースもありそうです。 なお、&&は「なんでもかんでも連結する」ものではなくて単にbool値の論理積を求めるだけのものなので、その辺は質問者さんもちゃんと理解しておかないと、と思います。
KSwordOfHaste

2019/02/16 02:49

> 条件を一箇所に集中させた方が見やすく そういう感覚もありますね。 単純に行の長さを長くしたくないとか、途中で折り曲げたときの見やすさなんてのも気になったりします。本件のように一つの条件式が長めになる場合はそういうことも考えたくなりますね。
baya

2019/02/16 03:05

いやーProcssingの本に書いてないことばかりでだいぶ苦戦してましたが 解決できました。 ただ回答を教えてくれるのでなく、勉強するポイントまでアドバイスしていただき、 ありがとうございます 大変参考になりました。 ありがとうございます!!
KSwordOfHaste

2019/02/16 03:49

Processingの言語仕様は一部Processing独自の仕様があるのを除きほぼJava言語そのものです。 (1) 浮動小数点数のリテラルがJavaだとdouble型、Processingだとfloat型とみなす (2) Processingのトップレベルの変数、関数は public class スケッチの名前 extends PApplet {  //スケッチに書いたコードそのもの  // ---ここから---  class 独自クラス {   ...  }  変数;  関数() {   ...  }  // ---ここまで--- } のような雰囲気、すなわちスケッチ名のクラスの入れ子のクラス、フィールド、メソッドになる という2点を除き「Processing言語はJava言語そのものと言っても過言ではない」です。実際内部的にはJava言語そのもので実装されているのでProcessingの言語だけについて詳細を解説したような書籍/ドキュメントは事実上存在しないのではないかと想像します。こういう事情がありプログラミングをProcessingで始める方にとって言語仕様の詳細を学ぶのはちょっと難しい印象ですが、逆に既にJavaの知識があるプログラマーにとってProcessing言語を詳しく学ぶ必要はまったくないです。Javaそのものなので。 言語仕様を詳しく知るにはかえってJava言語を学んだほうが早いかも知れません・・・
KSwordOfHaste

2019/02/16 03:55

すみません、回答に色々間違いがあったので訂正いたしました。Iterable->Iteratorと書いてしまった間違いは非常に大きいので元の回答内容を取り消し線で残しました。orz
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問