微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用另一个 HashSet<String> 扩展 HashSet<String>?

如何解决如何使用另一个 HashSet<String> 扩展 HashSet<String>?

当我尝试用另一个 Iterable's 扩展 import sqlite3 conn = sqlite3.connect('emaildb.sqlite') cur = conn.cursor() cur.execute('DROP TABLE IF EXISTS Counts') cur.execute(''' CREATE TABLE Counts (org TEXT,count INTEGER)''') fh = open(r"c:\Users\hotsa\OneDrive\Desktop\code\SQ\mBox.txt") for line in fh: if not line.startswith('From: '): continue pieces = line.split() email = pieces[1] dom = email.find('@') org = email[dom + 1: len(email)] cur.execute('SELECT count FROM Counts WHERE org = ? ',(org,)) row = cur.fetchone() if row is None: cur.execute('''INSERT INTO Counts (org,count) VALUES (?,1)''',)) else: cur.execute('UPDATE Counts SET count = count + 1 WHERE org = ?',)) conn.commit() # https://www.sqlite.org/lang_select.html sqlstr = 'SELECT org,count FROM Counts ORDER BY count DESC LIMIT 10' for row in cur.execute(sqlstr): print(str(row[0]),row[1]) cur.close() 时:

HashSet<String>

我明白了:

HashSet<String>

我该怎么做?

解决方法

HashSet::extend() 来自 Extend trait,因此接受任何迭代器(或可迭代的),而不仅仅是一个集合。

如果您将引用传递给集合,则该引用是可迭代的,但迭代器会生成对集合元素的引用 - 在本例中为 &String。由于 HashSet::<String>::extend() 需要一个生成实际字符串的迭代器,因此无法编译。有两种方法可以解决此问题:

  • 通过将集合 b 传递给 extend 按值a.extend(b);
  • 通过使用 bb.iter() 创建显式迭代器并克隆它产生的值:a.extend(b.iter().cloned())

在第一个变体中,b 将被消耗,因此调用者不再可用,但它的字符串将在 a 中重用。在第二种变体中,b 将保持可用,但其字符串将被复制以存储在 a 中。

请注意,在任何一种变体中,捕获 extend() 的返回值都没有意义,因为它会产生副作用并且不会返回有用的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。