如果我有数字1,2,3,4,5和6,并且我想以尽可能小的方式存储它们的某些组合,我该怎么做?
例如,我可能想要存储1,4和5.或者可能存储2,4,5和6.或者甚至可能存储所有六个数字.我将始终至少有一个需要存储的号码.我想我可能已经看到这有点移位完成但我不完全理解它是如何工作的.对于它的价值,我的最终目标是节省绝对最大空间量,因为这些值需要存储在具有极小存储空间的硬件设备上.
编辑----------------------------------------
感谢大家提出的所有好建议.我只是想澄清一下,我的应用程序中的实现并不一定需要尽可能小,只是我理解的东西,并且对我身后的其他开发人员有意义.最重要的是能够以尽可能小的方式表示这些值,因为我最终必须构建具有其他几个值的字节数组,并将其全部写入存储非常有限的设备.再次感谢你们的好建议!
我是Swift / iOS的新手,并且一直在与URLSession进行网络调用以访问REST API。这是我用来发出网络请求的(略作清理)的代码:
enum ApiRequestError: Error {
case statusCodeOtherThan200(statusCode: Int)
// other error cases will be added here
}
enum ApiResponse {
case success(Data)
case failure(Error)
}
typealias myCompletionHandler = (ApiResponse) -> ()
func sampleRestCall(token: String, completionHandler: @escaping myCompletionHandler) {
let url = URL(string: "https://www.server.com")
// removed headers, parameters, etc. for brevity
let request = URLRequest(url: url!)
URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
myCompletionHandler(.failure(error))
return
} else if let data = data, …Run Code Online (Sandbox Code Playgroud) 我有一个字节数组,每个字节都用 0xFF 初始化:
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 0xFF;
}
Run Code Online (Sandbox Code Playgroud)
一旦这个字节数组填充了有效数据,我需要提取存储在偏移量 192 处的 ASCII 字符串,长度最多可达 32 个字符。我这样做是这样的:
ASCIIEncoding enc = new ASCIIEncoding();
stringToRead = enc.GetString(buffer, 192, 32);
Run Code Online (Sandbox Code Playgroud)
这是可行的,但我需要去掉包含 0xFF 的尾随字节,以避免字符串看起来像“John Smith?????????????????????”。.NET 中有提供这种功能的函数吗?也许是类似 String.TrimEnd() 函数的东西,或者我正在寻找正则表达式来执行此操作?
我有一个WPF组合框,它绑定到这样的枚举:
<Window.Resources>
<local:EnumDescriptionConverter x:Key="enumDescriptionConverter"/>
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="cityNamesDataProvider">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:MyModel+CityNamesEnum"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<ComboBox x:Name="cityNameComboBox" ItemsSource="{Binding Source={StaticResource cityNamesDataProvider}}" SelectionChanged="cityNameComboBox_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
我绑定的枚举具有描述属性,如下所示:
public enum CityNamesEnum
{
[Description("New York City")]
NewYorkCity,
[Description("Chicago")]
Chicago,
[Description("Los Angeles")]
LosAngeles
}
Run Code Online (Sandbox Code Playgroud)
我并不总是希望显示每个枚举值.是否可以切换一个或多个枚举值的可见性?如果这些是ComboBoxItems,我想我可以简单地将.Visibility属性设置为隐藏,但由于它们是枚举值,我不确定这是否可行.有人知道吗?
我是iOS开发的新手,我正在构建一个由UINavigationController和三个ViewControllers组成的应用程序,我将其称为A,B和C.
最初显示视图控制器A. 从那里,我有两个工作流程:
A> C.
A> B> C.
在第二个工作流程中,我在视图控制器B上定义了shouldPerformSegue(withIdentifier).在此方法的内部,我需要做一些工作来决定是否应该显示视图控制器C或取消segue并显示错误消息.假设没有发生错误,将执行查看控制器C的segue.当显示视图控制器C时,后退按钮指向观察控制器B,但我需要它指向后面以查看控制器A.
我已经尝试通过在返回true之前调用shouldPerformSegue(withIdentifier)末尾的以下内容从导航堆栈中删除视图控制器B以允许segue继续:
self.navigationController?.viewControllers.remove(at: index)
Run Code Online (Sandbox Code Playgroud)
如果我正确阅读文档,要删除的视图控制器的索引对应于以下内容:
The root view controller is at index 0
The back view controller is at index n-2
The top view controller is at index n-1
Run Code Online (Sandbox Code Playgroud)
不幸的是,我没有任何运气让它正常工作.我确定我做错了什么,但我不确定还有什么可以尝试的.谁能指出我正确的方向?谢谢!
我正在编写一个C#/ WinForms应用程序,其中包含一个包含2,000行的DataGridView.我的用户会在这些行中输入字符串.字符串可以是任何语言,但最可能的两种语言是英语和阿拉伯语.我没有明确限制字符串中的最大字符数本身,但我所拥有的是每个字符串写入磁盘时存储的限制为2048字节.如果生成的字节数组小于2048字节,我需要用空字符填充它.我假设UTF-8可能是存储这些字符串的最有效编码?如果是这样,那么我认为在允许存储字符串之前我会做这样的事情:
byte[] stringAsBytes = System.Text.Encoding.UTF8.GetBytes(myString);
if (stringAsBytes.Length > 2048)
{
// string is too long to be stored in 2048 bytes
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,因为UTF-8是一个可变长度编码,给定字符串中的最大字符数将取决于构成字符串语言的字符的代码点范围?如果这是正确的,我是否真的需要为每个按键操作执行类似上面的代码,以确定字符串何时超出最大存储大小?
我正在构建一个WPF应用程序,我的UI由组合框和大约十几个其他UI控件组成.我有一个业务对象类,包含十几个属性并实现INotifyPropertyChanged.
这是我的业务对象的片段:
public class MyBusinessObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private int _idNumber;
public int IdNumber
{
get { return _idNumber; }
set
{
if (_idNumber == value)
{
return;
}
_idNumber = value;
OnPropertyChanged(new PropertyChangedEventArgs("IdNumber"));
}
}
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name == value)
{
return;
}
_name = value;
OnPropertyChanged(new PropertyChangedEventArgs("Name")); …Run Code Online (Sandbox Code Playgroud)