来自集合函数的ListBuffer

时间:2019-01-05 11:39:56

标签: scala collect

嗨,我正在措辞中如何简化下面的代码:

val leavesValues: ListBuffer[Double] = ListBuffer()
leavesValues.appendAll(
  leaves
    .collect { case leaf: Leaf => leaf.value.toDouble }
    .toList
)
leavesValues

我希望有可能使它成为一体。

3 个答案:

答案 0 :(得分:3)

您为什么要以ListBuffer开头?应该避免使用可变容器,并且在scala中,几乎不需要使用它们,除了一些罕见的极端情况。我建议,您只是假装它们根本不存在,直到您对语言有足够的了解以能够自信地区分出那些罕见的情况。

已经说过,可以使用称为breakOut的东西在没有中介的情况下完成集合类型之间的转换。这是您的用法:

import scala.collection.breakOut 
val leavesValues: ListBuffer[Double] = leaves.collect { 
  case leaf: Leaf => leaf.value.toDouble
}(breakOut)

答案 1 :(得分:2)

遵循足够简单吗?

<label>

如果val leavesValues: ListBuffer[Double] = ListBuffer(leaves.collect { case leaf: Leaf => leaf.value.toDouble } :_*) 是案例类:

Leaf

答案 2 :(得分:0)

您可以使用titanic_data = pd.read_csv("E:\\Python\\CSV\\train.csv") titanic_data.drop('Cabin', axis=1, inplace=True) titanic_data.dropna(inplace=True) #print(titanic_data.head(10)) new_sex = pd.get_dummies(titanic_data['Sex'],drop_first=True) new_embarked = pd.get_dummies(titanic_data['Embarked'],drop_first=True) new_pcl = pd.get_dummies(titanic_data['Pclass'],drop_first=True) titanic_data = pd.concat([titanic_data,new_sex,new_embarked,new_pcl],axis=1) titanic_data.drop(['PassengerId','Pclass','Name','Sex','Ticket','Embarked','Age','Fare'],axis=1,inplace=True) X = titanic_data.drop(['Survived'],axis=1) y = titanic_data['Survived'] print(X) print(y) X_train, y_train, X_test, y_test = train_test_split(X,y,test_size=0.3, random_state=1) logreg = LogisticRegression() logreg.fit(X_train,y_train) 通用转换方法(在Scala <2.13中):

raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (214, 7)

使用#browser.get("https://......") wait = WebDriverWait(browser, 10) try: browser.find_element_by_css_selector('button.green-btn').click() # wait until dialog dissapear wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, 'md-dialog[aria-describedby="dialogContent_0"]'))) # click the dropdown browser.find_element_by_css_selector('md-input-container').click() # select the option element setOptionElement = browser.find_element_by_css_selector('md-option[value="HDB Executive"]') # need to scrollIntoView if the option in the bottom # or you get error the element not clickable browser.execute_script('arguments[0].scrollIntoView();arguments[0].click()', setOptionElement) except Exception as ex: print(ex) 类似于to,就某种意义上说,它使用val leavesValues = leaves.collect { case leaf: Leaf => leaf.value.toDouble }.to[ListBuffer] 机器进行转换,除了这里您只能提供目标集合类型(不包含元素类型) )直接转到该方法。遗憾的是,这不适用于地图,因为to要求一种类型带有一个类型参数(breakOutCanBuildFrom等),而所有to后代都有两个类型参数({{ 1}},ListBuffer[A]等)。

在具有新集合库的Scala 2.13中,可以这样编写:

Vector[A]

请注意圆括号而不是括号:在Scala 2.13中,Map方法接受对集合的同伴对象的引用,而不是集合类型。在Scala 2.13中,集合库具有不同的设计。特别是,这种新方法还允许地图类型:

HashMap[A, B]