- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字典(字符串,字符串),我使用字典值设置目录路径,并使用键为每个值设置描述。
例如:
Value of a random item of my dictionary: "C:\Test"
Key name of that item = "Test folder"
好吧,现在在我的应用程序中我可以选择是显示描述还是完整的目录路径,这就是问题所在...
一些图片来理解它:
1 - 在这里我存储/管理我的字典的项目:
2 - 我可以切换此复选框以在组合框中显示字典键或字典值(您将在下一张图片中看到):
3 - 描述复选框被选中,然后描述显示在组合框中,当我添加一个项目时,它会添加选定的组合框。文本(可以是描述或完整路径)
4 - 现在我取消选中描述复选框,我想要的是更改 ListView 的描述,就像我将组合框的描述更改为等效的完整路径一样(但我所做的是更改组合框名称是重新加载字典,因为它是按字母顺序排序的,所以......我不知道如何对 ListView 子项做同样的事情)
我想提醒您,listview 子项文本可以是描述,也可以是完整路径,所以我需要在这两种选择中改变思路。
...这是我的代码:
(请阅读评论)
' First of all
' "Item.SubItems(2).Text" can be the description or it can be the full path, so I need to do it with both alternatives
If ListView_Monitor.Items.Count <> 0 Then
For Each Item As ListViewItem In ListView_Monitor.Items
If ShowDescriptions Then ' Showdescription is a boolean var to show descriptions or full paths
' Description is stored in the "Dictionary.Key"
' I don't know how to get the key name of the item
' Item.SubItems(2).Text = Directories_SendTo.keys ... ...
' CType(Item.SubItems(2).Text, Directories_SendTo... ...)
ElseIf Not ShowDescriptions Then ' Don't show descriptions, I will show fullpaths
' Fullpath is stored in the "Dictionary.Value"
' Remember that "Item.SubItems(2).Text" can be the description or the fullpath
' So if "Item.SubItems(2).Text" is the description then this piece of code works, 'cause the dictionary keyname is the same as the description name
Item.SubItems(2).Text = Directories_SendTo(Item.SubItems(2).Text)
' Here I need an alternative if "Item.SubItems(2).Text" is the directory path and not the description
End If
Next
End If
UPDATE:
解决方案(目前)...
我的问题是我是否可以改进这段代码(也许不要在 dict 中循环):
If ListView_Monitor.Items.Count <> 0 Then
For Each Item As ListViewItem In ListView_Monitor.Items
If ShowDescriptions Then ' Show descriptions
For Each value In Directories_SendTo.Values
If value = Item.SubItems(2).Text Then
Item.SubItems(2).Text = FindKeyByValue(Directories_SendTo, Item.SubItems(2).Text)
End If
Next
ElseIf Not ShowDescriptions Then ' Show fullpaths
For Each key In Directories_SendTo.Keys
If key = Item.SubItems(2).Text Then
Item.SubItems(2).Text = Directories_SendTo(key)
End If
Next
End If
Next
End If
Public Function FindKeyByValue(Of TKey, TValue)(dictionary As Dictionary(Of TKey, TValue), value As TValue) As TKey
For Each pair As KeyValuePair(Of TKey, TValue) In dictionary
If value.Equals(pair.Value) Then Return pair.Key
Next
' Throw New Exception("The value is not found in the dictionary.")
Return Nothing
End Function
最佳答案
要回答你的第二个问题,关于如何改进你正在使用的循环,它可以得到显着改进。目前,如果您在 ListView 中有 100 个项目,在目录中有 10 个项目,您的代码将循环至少 1000 次,最多可能循环 10 次,具体取决于目录中使用的值以及是否使用 ShowDescriptions被标记。
我们可以在进入赋值循环之前通过适当的键构建一个字典,将直接循环减少到 110 次:
If ListView_Monitor.Items.Count <> 0 Then
Dim DirectoriesByCurrentKey As New Dictionary(Of String, String)
If ShowDescriptions Then
' If we are showing the descriptions, add each of the items to the new collection, keyed by the value
For Each key In Directories_SendTo.Keys
Dim Description As String
Description = Directories_SendTo(key)
' We don't know if description is unique, so make sure that we don't get a runtime error if we
' try to add the same description multiple time
If Not DirectoriesByCurrentKey.ContainsKey(Description) Then
DirectoriesByCurrentKey.Add(Description, key)
End If
Next
Else
' Just use the current collection
DirectoriesByCurrentKey = Directories_SendTo
End If
For Each Item As ListViewItem In ListView_Monitor.Items
Dim sDescription As String = ""
' Try to find the current description using the current list item description
If DirectoriesByCurrentKey.TryGetValue(Item.SubItems(2).Text, sDescription) Then
' If we found the entry, change the description to what we found
Item.SubItems(2).Text = sDescription
End If
Next
End If
请注意,因为我们不知道 Description 是否唯一,所以我们需要在添加它之前测试它是否存在于新词典中。这将导致与您当前相同的行为,因为您的 FindKeyByValue 在第一次匹配时停止。
关于.net - 字典类型的问题,如果给定一个特定的文本然后得到等效的字典键或字典值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459718/
我在 php 方面遇到了一个小问题,我发现很难用语言来解释。我有一个包含键值的关联数组。我想制作一个函数(或者如果已经有一个函数),它将一个数组作为输入并删除重复项,但两种方式都是如此。 例如: 在我
我有一个在系统托盘中运行的应用程序,是否可以允许用户通过 C# 中的 Windows 键 + 键 恢复该应用程序? 谢谢 最佳答案 是的,使用 Windows API。我认为 Windows 键与 C
我正在使用 Waterline通过 Sails 查询 MySQL 数据库。我找到了 2 种方法。 不知道哪个更好? 顺便问一下,如何处理这两种情况的错误? 1. Model.findOne().whe
我正在尝试测试是否按下了 Alt 键。 我的支票类似于: private void ProcessCmdKey(Keys keyData) { if (keyData == Keys.Alt) {
我正在使用 Selenium WebDriver 和 Ruby 进行自动化测试。我需要点击一个按钮。我无法通过 id 或 css 或 xpath 获取按钮元素,因为按钮是透明的。我想使用 Tab 和
我是 IntelliJ 的新手,我看到一个启动提示说,“任何工具窗口中的 ⎋ 键都会将焦点移动到编辑器。”但是,我不知道⎋键是什么。我一直在编程很长时间。我的键盘上可能有一个我多年来一直错过的键吗?
我使用 OMDB API 创建了一个电影搜索页面。我遇到的问题是,如果我搜索一部包含多个单词的电影,此 API 会出错,因为 API 的 URL 必须在 URL 中的每个单词之间有 + 键。所以我想知
我已经用 Elasticsearch 玩了大约一天了,所以我非常陌生。我正在尝试 POST/import 一个简单的文件: { "compression" : "none", "com
enter image description here 在此示例中,要记录带有“title”和“director”键的属性值,使用 obj[key]。因为我们已经处于对象的执行上下文中:在本例中是电
我是新开类。 我使用新的电子邮件 ID 和密码在 openshift 上创建了一个项目。让我们称之为 firstApp 。我做了 rhc 设置和我的 ssh key 与我的项目相关联。 我的 frie
当我使用 Jackson 反序列化 json 字符串时,我通常不想创建所有 bean 类的属性,而且我只需要一些 json 字符串的字段,其他字段我不需要。所以我经常只在我需要的 java 类 bea
我想编写一个带有 keys/keys* 的规范,但能够内联值规范,但不支持 by design ,我明白了其背后的原因。然而,有时,本地图存在特定上下文时,您确实希望(或者只是通过遗留或第三方)键和值
my %fruit_colors = ("apple", "red", "banana", "yellow"); my @fruits = keys %fruit_colors; my @colors
我正在使用 vb.net 2008 和 DataGridView。我正在寻找允许我将 enter 键移动到右侧的下一列而不是在保持在同一列时向下移动一行的代码。 最佳答案 如果您正在确认编辑,只需移动
我刚刚开始学习编码,我遇到了这个我无法理解的问题。 “我们将添加的第二个函数称为搜索,它将以名字作为参数。它将尝试将收到的名字与我们 friend 联系人列表中的任何名字相匹配。如果它找到匹配项,就会
我已经在 Python 中运行了下面的代码,以从文本文件中生成单词列表及其计数。我该如何从“Frequency_list”变量中过滤掉计数为 1 的单词? 另外,如何将底部的打印语句循环导出到CSV
我正在尝试 XSLT 中的查找表示例,但无法使其正常工作
是否可以在 Javascript/Typescript 中编写一个将参数名称/键作为字符串返回的函数? function foo(arg) {...} let user = new User(); f
我正在尝试创建一个带有键/值的对象,但是当我看到该对象时,键没有正确填充.. 我希望键是 - 0,1,2,3 但它显示“索引”作为键。 > categories = ["09/07/2016 00:0
将 Android Studio 从 1.5 升级到 2.0 后,模拟器(现在版本为 25.1.1,我在其上配置了模拟硬件键盘)不再将 [Esc] 键识别为等同于 [Back] 按钮。 如何恢复这个有
我是一名优秀的程序员,十分优秀!