我如何组织这些数据?(How do I organize this data?)
我有一个有50多个问题的iOS应用程序。 每个问题都有:
- 一个问题
- 正确答案
- 三个错误的答案
- 图片名称
最初我尝试使用一个结构(如下图),并为每个问题创建一个常量,当用户得到这个问题时我可以调用/加载:
struct QuestionInfo { var question: String var correctAnswer: String var wrongAnswer_1: String? var wrongAnswer_2: String? var wrongAnswer_3: String? var imageName: String }
不过,我被告知这是一个愚蠢的想法,我应该使用数组。 我明白数组是指这种类型的东西,但我如何保持它的组织?
好像我有六个数组:
let question = ["Is Mars a planet?", "Is Spain in Africa?", "+50 more"] let correctAnswer = ["Yes", "No", "+50 more"] //+Four more arrays
每个阵列将有50多个项目,每个问题将一次列入六个不同的列表,这使我很难保持组织。 我应该为每个问题创建一个数组/结构,然后创建一个数组/结构数组?
let questionPackage = QuestionInfo( question: "Is Mars a planet?", correctAnswer: "Yes", wrongAnswer_1: "No", wrongAnswer_2: "No one knows.", wrongAnswer_3: "It's a candy bar." imageName: "MarsPhoto", ) let questionPackage2 = QuestionInfo( question: "Is Spain in Africa?", correctAnswer: "No", wrongAnswer_1: "Yes", wrongAnswer_2: "It's up for debate", wrongAnswer_3: "Duh, it's in South America." imageName: "SpanishFlag", ) //Array of structs let array = [questionPackage, questionPackage2, etc]
我试图根据最有效的运行方式和正常的设计模式进行选择。
I have an iOS app with 50+ questions. Each question has:
- A question
- Correct answer
- Three incorrect answers
- An image name
Originally I tried using a struct (like below) and creating a constant for each question that I could call/load when the user gets that question:
struct QuestionInfo { var question: String var correctAnswer: String var wrongAnswer_1: String? var wrongAnswer_2: String? var wrongAnswer_3: String? var imageName: String }
However, I've been told that was a dumb idea and that I should use arrays. I understand arrays are meant for this type of thing, but how do I keep it organized?
It seems like I'll have six arrays:
let question = ["Is Mars a planet?", "Is Spain in Africa?", "+50 more"] let correctAnswer = ["Yes", "No", "+50 more"] //+Four more arrays
Each array will be 50+ items long and each question will be in six different lists at once, making it difficult for me to stay organized. Should I create an array/struct for each question and then make an array of arrays/structs??
let questionPackage = QuestionInfo( question: "Is Mars a planet?", correctAnswer: "Yes", wrongAnswer_1: "No", wrongAnswer_2: "No one knows.", wrongAnswer_3: "It's a candy bar." imageName: "MarsPhoto", ) let questionPackage2 = QuestionInfo( question: "Is Spain in Africa?", correctAnswer: "No", wrongAnswer_1: "Yes", wrongAnswer_2: "It's up for debate", wrongAnswer_3: "Duh, it's in South America." imageName: "SpanishFlag", ) //Array of structs let array = [questionPackage, questionPackage2, etc]
I'm trying to choose based on what will run most efficiently and a normal design pattern.
原文:https://stackoverflow.com/questions/38297481
最满意答案
使用
sparklyr
你可以按照sparklyr
建议使用array
和explode
:df_tbl %>% mutate(arr = explode(array(1, 1, 1))) %>% select(-arr) # # Source: lazy query [?? x 2] # # Database: spark_connection # row1 row2 # <int> <chr> # 1 1 A # 2 1 A # 3 1 A # 4 2 B # 5 2 B # 6 2 B # 7 3 C # 8 3 C # 9 3 C
并且概括
library(rlang) df_tbl %>% mutate(arr = !!rlang::parse_quo( paste("explode(array(", paste(rep(1, 3), collapse = ","), "))") )) %>% select(-arr) # # Source: lazy query [?? x 2] # # Database: spark_connection # row1 row2 # <int> <chr> # 1 1 A # 2 1 A # 3 1 A # 4 2 B # 5 2 B # 6 2 B # 7 3 C # 8 3 C # 9 3 C
您可以在其中轻松调整行数。
With
sparklyr
you can usearray
andexplode
as suggested by @Oli:df_tbl %>% mutate(arr = explode(array(1, 1, 1))) %>% select(-arr) # # Source: lazy query [?? x 2] # # Database: spark_connection # row1 row2 # <int> <chr> # 1 1 A # 2 1 A # 3 1 A # 4 2 B # 5 2 B # 6 2 B # 7 3 C # 8 3 C # 9 3 C
and generalized
library(rlang) df_tbl %>% mutate(arr = !!rlang::parse_quo( paste("explode(array(", paste(rep(1, 3), collapse = ","), "))") )) %>% select(-arr) # # Source: lazy query [?? x 2] # # Database: spark_connection # row1 row2 # <int> <chr> # 1 1 A # 2 1 A # 3 1 A # 4 2 B # 5 2 B # 6 2 B # 7 3 C # 8 3 C # 9 3 C
where you can easily adjust number of rows.
相关问答
更多-
R - 如何使用sparklyr复制spark数据帧中的行(R - How to replicate rows in a spark dataframe using sparklyr)[2023-02-06]
使用sparklyr你可以按照sparklyr建议使用array和explode : df_tbl %>% mutate(arr = explode(array(1, 1, 1))) %>% select(-arr) # # Source: lazy query [?? x 2] # # Database: spark_connection # row1 row2 ## 1 1 A # 2 1 A # 3 1 A ... -
我想出来了 set_swift_config = function(sc){ #get spark_context ctx <- spark_context(sc) #set the java spark context jsc <- invoke_static( sc, "org.apache.spark.api.java.JavaSparkContext", "fromSparkContext", ctx ) #set the swift configs: hconf = jsc %>% invok ...
-
来自Spark DataFrame的最后一行(使用sparklyr&dplyr)(Last Rows from a Spark DataFrame (using sparklyr & dplyr))[2024-03-12]
这是一个解决方案(返回未分类的尾部): tbl_df(batting_tbl) %>% slice(101282:101332) # Prints the last 50 rows 这是第二个解决方案(过滤索引): tbl_df(batting_tbl) %>% arrange(-as.numeric(rownames(.))) %>% head(., n = 50) **注意:上述两个都需要tbl_df ,而batting_tbl %>% head(., n = 50)不需要收集到R data.fra ... -
Sparklyr:如何计算2个Spark表之间的相关系数?(Sparklyr: how to calculate correlation coefficient between 2 Spark tables?)[2022-07-31]
我个人会通过返回输入数据集来解决它。 只是为了记录输入数据已使用CSV阅读器加载: df <- spark_read_csv( sc, path = path, name = "simData", delimiter = " ", header = "false", infer_schema = "false" ) %>% rename(y = `_c0`, xs = `_c1`) 看起来或多或少像这样: y ... -
Sparklyr中缺少值(Missing values in Sparklyr)[2022-02-15]
它看起来像你的混合SparkR ( isNull )和sparklyr (其余)API。 据我所知这不支持,乍一看它看起来你的代码实际上应该抛出一个异常。 df <- data.frame(x=c(1, NA), y=c(-1, 2)) copy_to(sc, df, "df", overwrite=TRUE) %>% filter(is.na(x)) %>% count() Source: query [1 x 1] Database: spark connection ... n ... -
对于分组数据,您最好的选择是percentile_approx : diamonds_sdl %>% group_by(color) %>% summarise(q1 = percentile_approx(carat, .1)) # Source: lazy query [?? x 2] # Database: spark_connection color q1
1 H 0.310 2 F 0.310 3 G 0.310 4 I ... -
是的,您确实需要本地Spark安装来提交Spark应用程序。 其余依赖于模式: 在客户端模式下,驱动程序将在您提交应用程序的同一节点上运行。 在集群模式下,驱动程序将在集群上运行。 将不会有本地的Spark进程。 但是,这不支持交互式处理。 Yes, you do need local Spark installation to submit Spark applications. The rest depends on the mode: In the client mode driver will ru ...
-
首先,你混合了订单: df_tbl %>% rename(new1 = old1, new2 = old2) 但是使用Sparklyr你必须使用select : df_tbl %>% select(new1 = old1, new2 = old2) First of all you mixed the order: df_tbl %>% rename(new1 = old1, new2 = old2) but with Sparklyr you have to use select: df_tbl % ...
-
与标准Spark相同,您可以使用rlike (Java正则表达式): df <- copy_to(sc, iris) df %>% filter(rlike(Species, "osa")) # or anchored df %>% filter(rlike(Species, "^.*osa.*$") 或者like (简单的SQL正则表达式): df %>% filter(like(Species, "%osa%")) The same as in standard Spark, you can ...
-
称这个“最好”将是一个延伸,但你可以尝试这样的事情(为了方便使用purr ): columns_for_type <- function(sc, name, type="StringType") { spark_session(sc) %>% invoke("table", name) %>% # Get (name, type) tuples invoke("dtypes") %>% # Filter by type purrr::keep(function ...